Agent SkillsとMCPの比較
table:_
比較項目 MCP Claude Skills
単位 関数 ディレクトリ
実行主体 ホスト(エージェント実装側) Claude(モデル自身)
コンテキスト負荷 高い(ツール定義やスキーマが全部入る) 低い(必要なスキルのみ遅延ロード)
管理方式 サーバー経由(MCP Server) ローカル / Claude.ai 経由でアップロード
同じ「Excel分析」をMCPとSkillsで比べる
MCPでExcel分析をする場合
シナリオ
「Excel ファイルを受け取って、売上集計を返すツール」を登録する。
MCPでの構成イメージ
1️⃣ MCPサーバーが提供する関数定義
code:json
{
"name": "analyze_sales",
"description": "Aggregate and summarize sales data from an Excel file.",
"parameters": {
"file_path": "string"
},
"returns": {
"summary": "string"
}
}
2️⃣ モデルへのロード
Claudeは、起動時にMCPサーバーに接続し、このツール定義を コンテキストに全て読み込む。
3️⃣ 実行時
Claude が呼び出しを推論:
code:_
call analyze_sales(file_path="/tmp/sales.xlsx")
→ MCPクライアントがその呼び出しを受けて
→ 外部プロセス(Pythonサーバー等)で関数を実行
→ 結果(JSON)をモデルに返す
→ Claude がユーザーに自然言語で要約を返す。
特徴
モデルはツール呼び出しを「計画・推論」するが、実行はホスト依存。
MCPサーバー側でHTTP/API経由で外部リソースにも自由にアクセス可能。
しかし:
ツールが増えるほど、関数定義やスキーマをコンテキストに展開し続ける必要がある。
チェーン実行(ツールAの結果をツールBへ)では入出力データがコンテキストに残留し肥大化。
Claude SkillsでExcel分析をする場合
シナリオ
同じく「Excel ファイルを受け取って、売上集計を返す」スキルを作る。
構成
code:_
excel-sales-analyzer/
├── SKILL.md
├── analyze.py
└── requirements.txt
SKILL.md
code:yaml
---
name: "excel-sales-analyzer"
description: "Analyze sales Excel files and summarize key metrics."
---
Use analyze.py to:
- Read Excel sheets using pandas
- Aggregate sales by region
- Return summary statistics as Markdown
analyze.py
code:python
import pandas as pd
def run(file_path):
df = pd.read_excel(file_path)
summary = df.groupby("region")"revenue".sum() print(summary.to_markdown())
実行時の流れ
1️⃣ Claude がユーザーの入力(例:「この売上Excelを分析して」)を受ける
2️⃣ Claude が登録スキル一覧をスキャンし、
"excel-sales-analyzer" が関連ありと判断
3️⃣ 必要になったときのみ SKILL.md の本文+スクリプトをロード
5️⃣ 結果をチャットに返す
特徴
外部サーバー不要(Claude 自身がコードを実行)。
SKILL.md に書かれたプロンプトやスクリプトがそのままClaudeの実行ロジックになる。
メタデータだけを常駐させ、必要時のみ内容をロード(Progressive Disclosure)。
つまり「ツール呼び出し」ではなく「Claudeがスクリプトを自律的に実行」。